package com.culturalCenter.dataCenter.mapper.volunteer;

import com.culturalCenter.dataCenter.customEntity.volunteer.CustomVolunteerSignInStatus;
import com.culturalCenter.dataCenter.entity.volunteer.CdcVolunteerSignuprecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 志愿者报名记录(CdcVolunteerSignuprecord)表数据库访问层
 *
 * @author makejava
 * @since 2021-09-17 16:12:13
 */
@Mapper
public interface CdcVolunteerSignuprecordMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param id
     *         主键
     *
     * @return 实例对象
     */
    CdcVolunteerSignuprecord queryById(@Param("id") String id);

    /**
     * 查询指定行数据
     *
     * @param offset
     *         查询起始位置
     * @param limit
     *         查询条数
     *
     * @return 对象列表
     */
    List<CdcVolunteerSignuprecord> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param cdcVolunteerSignuprecord
     *         实例对象
     *
     * @return 对象列表
     */
    List<CdcVolunteerSignuprecord> queryAll(CdcVolunteerSignuprecord cdcVolunteerSignuprecord);

    /**
     * 新增数据
     *
     * @param cdcVolunteerSignuprecord
     *         实例对象
     *
     * @return 影响行数
     */
    int insert(CdcVolunteerSignuprecord cdcVolunteerSignuprecord);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities
     *         List<CdcVolunteerSignuprecord> 实例对象列表
     *
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<CdcVolunteerSignuprecord> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities
     *         List<CdcVolunteerSignuprecord> 实例对象列表
     *
     * @return 影响行数
     */
    int insertOrUpdateBatch(@Param("entities") List<CdcVolunteerSignuprecord> entities);

    /**
     * 修改数据
     *
     * @param cdcVolunteerSignuprecord
     *         实例对象
     *
     * @return 影响行数
     */
    int update(CdcVolunteerSignuprecord cdcVolunteerSignuprecord);

    /**
     * 通过主键删除数据
     *
     * @param id
     *         主键
     *
     * @return 影响行数
     */
    int deleteById(@Param("id") String id);

    /**
     * 获得签到状态
     *
     * @return
     */
    @Select("SELECT SUM( IF(signInStatus = 0 AND activityStartTime > NOW(), 1, 0) ) AS waitNum, " +
            "SUM( IF(signInStatus = 3, 1, 0) ) AS noSignInNum, " +
            "SUM( IF((signInStatus IN (1, 2) AND signOutStatus = 0),1,0)) AS waitSignOutNum, " +
            "SUM( IF(signOutStatus IN (1, 2, 3) AND NOW() > activityEndTime, 1, 0) ) AS completedNum FROM cdc_volunteer_signUpRecord " +
            "WHERE STATUS = 1 AND auditStatus IN (1, 3) AND delTag = 0")
    CustomVolunteerSignInStatus getStatus();

    /**
     * 统计签到来源
     *
     * @param source
     *
     * @return
     */
    @Select("SELECT COUNT(1) FROM cdc_volunteer_signUpRecord WHERE signInSource=#{source} AND STATUS = 1 AND auditStatus IN ( 1, 3 ) AND delTag =0")
    Integer countSources(@Param("source") int source);

}
